home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / video / fly8111-.000 / fly8111- / fly8 / airdata.c next >
C/C++ Source or Header  |  1979-12-31  |  2KB  |  98 lines

  1. /* --------------------------------- airdata.c ------------------------------ */
  2.  
  3. /* This is part of the flight simulator 'fly8'.
  4.  * Author: Eyal Lebedinsky (eyal@ise.canberra.edu.au).
  5. */
  6.  
  7. /* get standard atmospheric adta.
  8.  * Works in the range -16,000...100,000 feet.
  9. */
  10.  
  11. #include "fly.h"
  12.  
  13.  
  14. static short NEAR rrhotab[] = {
  15.     FCON(1.2550),    /* -5,000 */
  16.     FCON(1.2019),    /* -4,000 */
  17.     FCON(1.1495),    /* -3,000 */
  18.     FCON(1.0984),    /* -2,000 */
  19.     FCON(1.0485),    /* -1,000 */
  20.  
  21.     FCON(1.0000),    /*    000 */
  22.     FCON(0.9526),    /*  1,000 */
  23.     FCON(0.9064),    /*  2,000 */
  24.     FCON(0.8615),    /*  3,000 */
  25.     FCON(0.8178),    /*  4,000 */
  26.     FCON(0.7753),    /*  5,000 */
  27.     FCON(0.7340),    /*  6,000 */
  28.     FCON(0.6939),    /*  7,000 */
  29.     FCON(0.6551),    /*  8,000 */
  30.     FCON(0.6174),    /*  9,000 */
  31.  
  32.     FCON(0.5810),    /* 10,000 */
  33.     FCON(0.5457),    /* 11,000 */
  34.     FCON(0.5045),    /* 12,000 */
  35.     FCON(0.4664),    /* 13,000 */
  36.     FCON(0.4312),    /* 14,000 */
  37.     FCON(0.3987),    /* 15,000 */
  38.     FCON(0.3686),    /* 16,000 */
  39.     FCON(0.3408),    /* 17,000 */
  40.     FCON(0.3151),    /* 18,000 */
  41.     FCON(0.2913),    /* 19,000 */
  42.  
  43.     FCON(0.2694),    /* 20,000 */
  44.     FCON(0.2485),    /* 21,000 */
  45.     FCON(0.2295),    /* 22,000 */
  46.     FCON(0.2118),    /* 23,000 */
  47.     FCON(0.1957),    /* 24,000 */
  48.     FCON(0.1808),    /* 25,000 */
  49.     FCON(0.1673),    /* 26,000 */
  50.     FCON(0.1545),    /* 27,000 */
  51.     FCON(0.1431),    /* 28,000 */
  52.     FCON(0.1322),    /* 29,000 */
  53.  
  54.     FCON(0.1224),    /* 30,000 */
  55.     FCON(0.1126)    /* 31,000 */
  56. };
  57.  
  58. /* Calculate atmospheric parameters.
  59.  * rrho    air density (relative to sea level)
  60.  * rho    air density
  61.  * sos    speed of sound
  62. */
  63. extern void FAR
  64. airdata (long height, int *srho, int *rrho, int *rho, int *sos)
  65. {
  66.     long    t;
  67.     int    i, r;
  68.  
  69.     t = height/VONE + 5000;
  70.     i = (int)(t/1000);
  71.     if (i < 0)
  72.         r = rrhotab[0];
  73.     else if (i >= rangeof(rrhotab)-1)
  74.         r = rrhotab[rangeof(rrhotab)-1];
  75.     else {
  76.         r = rrhotab[i];
  77.         r += muldiv (rrhotab[i+1]-r, (int)(t-i*1000L), 1000);
  78.     }
  79.     if (srho)
  80.         *srho = r;
  81.     r = fmul (r, r);
  82.     if (rrho)
  83.         *rrho = r;
  84.     if (rho)
  85.         *rho = fmul (r, FCON(1.225));
  86.  
  87.     if (sos) {
  88.         if (t <= 11000L)
  89.             *sos = 340*VONE
  90.                 - muldiv ((340-295)*VONE, (int)t, 11000);
  91.         else if (t <= 20000L)
  92.             *sos = 295*VONE;
  93.         else
  94.             *sos = 295*VONE
  95.                 + fmul (FCON(0.67), (int)((t - 20000L)/1000));
  96.     }
  97. }
  98.